<?php

class MatriculaController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			//'accessControl', // perform access control for CRUD operations
			'rights',
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}
	
	
	public function beforeAction($action) {
        $config = array();
        switch ($action->id) {
            case 'matriculacion':

                $config = array(
                    'steps' => array(
                        t('Buscar Alumno', 'carrera_etiqueta') => 'alumnoBusqueda',
                        t('Seleccionar Programa', 'carrera_etiqueta') => 'seleccionarProgramaAcademico',
                        t('Datos de Inscripcion', 'carrera_etiqueta') => 'datosMatriculacion',),
                    'forwardOnly' => true,
                    'events' => array(
                        'onStart' => 'wizardStart',
                        'onProcessStep' => 'parseMatriculacionSteps',
                        'onFinished' => 'saveMatriculacion',
                        'onInvalidStep' => 'wizardInvalidStep',
                    ),
                );
                break;
            default:
                break;
        }
        if (!empty($config)) {
            $config['class'] = 'application.components.WizardBehavior';
            $this->attachBehavior('wizard', $config);
        }
        return parent::beforeAction($action);
    }
	
	public function actionMatriculacion($step = null) {
        $this->process($step);
    }
    
 	/**
     * Process wizard steps.
     * The event handler must set $event->handled=true for the wizard to continue
     * @param WizardEvent The event
     */
    public function parseMatriculacionSteps($event) {
        if (isset($_POST['cancelarMatriculacion'])) {
            $data = $event->sender->reset();
            $this->redirect(array('admin'));
        }

        if ($event->step == 'alumnoBusqueda') {
            $this->_parseAlumno($event);
        }

        if ($event->step == 'seleccionarProgramaAcademico') {
            $this->_parseProgramaAcademico($event);
        }

        if ($event->step == 'datosInscripcion') {
            $this->_parseMatriculacion($event);
        }
    }
	
    
	private function _parseAlumno($event) {
        $pasoValidado = false;
       	$model = MatriculacionWizardService::getAlumno($_POST);
       		
       	if(!is_null($model->persona))
       	{
			$estadoContable = ContableService::getEstadoContablePersona($model->persona, ContableService::HABILITACION_MATRICULA);
	        if ($estadoContable['AUTOGESTION_ESTADO'] || $estadoContable['BAS_ESTADO'])
	        {
	        	$pasoValidado = true;
	            $event->sender->save($model->attributes);
	            $event->handled = true;
	        } 
	        else
	        {
	        	$model->addError('persona_contable_bas', $estadoContable['BAS_MENSAJE']);
	            $model->addError('persona_contable_autogestion', $estadoContable['AUTOGESTION_MENSAJE']);
	        }
       	}
            
        if (!$pasoValidado) {
            $this->render('matriculacion', compact('event', 'form', 'model'));
        }
    }
	    
	private function _parseProgramaAcademico($event) {
        $model = new Ingreso;
        $pasoValidado = false;

        $data = $event->sender->read('alumnoBusqueda');

		$alumno = new Alumno();
        $alumno->alumno_persona_numerodocumento = $data['alumno_persona_numerodocumento'];
        $alumno->alumno_persona_tipodocumento_id = $data['alumno_persona_tipodocumento_id'];
        
        $programasAcademicosAMatricular = MatriculacionWizardService::getProgramasAcademicosAMatricular($alumno);

        if (!$pasoValidado) {
            $this->render('inscripcion', compact('event', 'form', 'model', 'programasAcademicosAbiertos', 'inscripcionesDelAlumno'));
        }
    }
    
    
    
	

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Matricula;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Matricula']))
		{
			$model->attributes=$_POST['Matricula'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->matricula_persona_tipo_documento_id));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Matricula']))
		{
			$model->attributes=$_POST['Matricula'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->matricula_persona_tipo_documento_id));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			// we only allow deletion via POST request
			$this->loadModel($id)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
			if(!isset($_GET['ajax']))
				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
		}
		else
			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		/*
		$dataProvider=new CActiveDataProvider('Matricula');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
		*/
		$this->actionAdmin();
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Matricula('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Matricula']))
			$model->attributes=$_GET['Matricula'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=Matricula::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param CModel the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='matricula-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}
